//
//  YKHTTPService.h
//  DualMediationSDK
//
//  Created by YeJary on 2025/6/23.
//

#import <Foundation/Foundation.h>
#import "YKHTTPServiceConfig.h"
#import "../../Utils/Network/IMNetworkUtils.h"

NS_ASSUME_NONNULL_BEGIN

/**
 * HTTP服务管理器
 * 基于IMNetworkUtils的HTTP服务框架，支持自动签名和公共参数
 */
@interface YKHTTPService : NSObject

#pragma mark - 单例

/**
 * 获取单例实例
 */
+ (instancetype)sharedService;

#pragma mark - 配置

/**
 * 配置HTTP服务
 * @param productionURL 生产环境URL
 * @param testURL 测试环境URL
 * @param signKey 签名密钥
 * @param gameVersion 游戏版本
 * @param sdkVersion SDK版本
 */
+ (void)configureWithProductionURL:(NSString *)productionURL
                           testURL:(NSString *)testURL
                           signKey:(NSString *)signKey
                       gameVersion:(NSString *)gameVersion
                        sdkVersion:(NSString *)sdkVersion;

/**
 * 切换到生产环境
 */
+ (void)switchToProduction;

/**
 * 切换到测试环境
 */
+ (void)switchToTest;

/**
 * 获取当前配置
 */
+ (YKHTTPServiceConfig *)currentConfig;

#pragma mark - HTTP请求方法

/**
 * GET请求
 * @param path 请求路径
 * @param parameters 请求参数（会自动添加公共参数和签名）
 * @param success 成功回调
 * @param failure 失败回调
 * @return 网络任务对象
 */
+ (IMNetworkTask *)GET:(NSString *)path
            parameters:(NSDictionary * _Nullable)parameters
               success:(IMNetworkSuccessBlock _Nullable)success
               failure:(IMNetworkFailureBlock _Nullable)failure;

/**
 * POST请求
 * @param path 请求路径
 * @param parameters 请求参数（会自动添加公共参数和签名）
 * @param success 成功回调
 * @param failure 失败回调
 * @return 网络任务对象
 */
+ (IMNetworkTask *)POST:(NSString *)path
             parameters:(NSDictionary * _Nullable)parameters
                success:(IMNetworkSuccessBlock _Nullable)success
                failure:(IMNetworkFailureBlock _Nullable)failure;

/**
 * PUT请求
 * @param path 请求路径
 * @param parameters 请求参数（会自动添加公共参数和签名）
 * @param success 成功回调
 * @param failure 失败回调
 * @return 网络任务对象
 */
+ (IMNetworkTask *)PUT:(NSString *)path
            parameters:(NSDictionary * _Nullable)parameters
               success:(IMNetworkSuccessBlock _Nullable)success
               failure:(IMNetworkFailureBlock _Nullable)failure;

/**
 * DELETE请求
 * @param path 请求路径
 * @param parameters 请求参数（会自动添加公共参数和签名）
 * @param success 成功回调
 * @param failure 失败回调
 * @return 网络任务对象
 */
+ (IMNetworkTask *)DELETE:(NSString *)path
               parameters:(NSDictionary * _Nullable)parameters
                  success:(IMNetworkSuccessBlock _Nullable)success
                  failure:(IMNetworkFailureBlock _Nullable)failure;

#pragma mark - 工具方法

/**
 * 获取当前环境描述
 */
+ (NSString *)currentEnvironmentDescription;

/**
 * 检查是否已配置
 */
+ (BOOL)isConfigured;

@end

NS_ASSUME_NONNULL_END